#include <stdio.h>
#include <stdlib.h>
#include "TADPersona.h"
#include "TADNombre.h"

int ComprobarFichero ( FILE * Archivo ){
	int Res=0;

	if (Archivo == NULL){
		Res=1;
	}else{
		Res=0;
	}
	return(Res);
}

Nombre ArchivoATADNombre( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Pos=0;
	char Letra=0;
	Nombre N;

	while ((Letra=getc(Archivo)) != Separador){
		N.NomPr[Pos] = Letra;
		Pos++;
	}
	N.NomPr[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		N.PriApe[Pos] = Letra;
		Pos++;
	}
	N.PriApe[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		N.SegApe[Pos] = Letra;
		Pos++;
	}
	N.SegApe[Pos] = 0;
	return(N);
}

NIF ArchivoATADNIF( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Pos=0;
	char Letra=0;
	NIF N;

	while ( Pos < 8){
		Letra = getc(Archivo);
		N.NumNIF[Pos] = Letra;
		Pos++;
	}
	N.NumNIF[Pos] = 0;
	Pos = 0;
	N.LetraNIF = getc(Archivo);
	Letra = getc(Archivo);
	return(N);
}

unsigned short ArchivoAEdad( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Res = 0;
	char Str[4], Letra = 0;
	unsigned short Pos = 0;

	strcpy(Str, "\0");
	while ((Letra=getc(Archivo)) != Separador){
		Str[Pos] = Letra;
		Pos++;
	}
	Str[Pos] = 0;
	Res = atoi(Str);
	return(Res);
}

unsigned short ArchivoAOcup( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Res = 0, Pos = 0;
	char Letra = 0;

	Res = getc(Archivo) - 48;
	Letra = getc(Archivo);
	return(Res);
}

Trabaj ArchivoATADTrabaj( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Pos=0;
	char Letra=0, Str[8];
	Trabaj T;

	strcpy(Str, " ");

	while ((Letra=getc(Archivo)) != Separador){
		T.CC[Pos] = Letra;
		Pos++;
	}
	T.CC[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		Str[Pos] = Letra;
		Pos++;
	}
	T.N_Hijos = atoi(Str);
	Pos = 0;
	strcpy(Str, " ");
	while ((Letra=getc(Archivo)) != Separador ){
		Str[Pos] = Letra;
		Pos++;
	}
	Str[Pos] = 0;
	T.S_Bruto = atof(Str);
	return(T);
}

Direc ArchivoATADDirec( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Pos=0;
	char Letra=0, Str[8];
	Direc D;

	strcpy(Str, " ");

	while ((Letra=getc(Archivo)) != Separador){
		D.Cargo[Pos] = Letra;
		Pos++;
	}
	D.Cargo[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador ){
		Str[Pos] = Letra;
		Pos++;
	}
	Str[Pos] = 0;
	D.Compl = atof(Str);
	Pos = 0;
	
	strcpy(Str, " ");
	while ((Letra=getc(Archivo)) != Separador ){
		Str[Pos] = Letra;
		Pos++;
	}
	Str[Pos] = 0;
	D.S_Bruto = atof(Str);
	strcpy(Str, " ");
	return(D);
}

Direccion ArchivoATADDir( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Pos=0;
	char Letra=0;
	Direccion D;

	while ((Letra=getc(Archivo)) != Separador){
		D.Carrer[Pos] = Letra;
		Pos++;
	}
	D.Carrer[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		D.Portal[Pos] = Letra;
		Pos++;
	}
	D.Portal[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		D.Piso[Pos] = Letra;
		Pos++;
	}
	D.Piso[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		D.Puerta[Pos] = Letra;
		Pos++;
	}
	D.Puerta[Pos] = 0;
	return(D);
}

Direcc ArchivoATADDirecc( FILE *Archivo, char Ruta[], char Separador ){
	unsigned short Pos=0;
	char Letra=0;
	Direcc D;

	D.Dir = ArchivoATADDir( Archivo, Ruta, Separador);
	while ((Letra=getc(Archivo)) != Separador){
		D.Ciutat[Pos] = Letra;
		Pos++;
	}
	D.Ciutat[Pos] = 0;
	Pos = 0;
	while ((Letra=getc(Archivo)) != Separador){
		D.CPostal[Pos] = Letra;
		Pos++;
	}
	D.CPostal[Pos] = 0;
	return(D);
}

void ArchivoAVectorPersona ( FILE *Archivo, char Ruta[], char Separador, Persona *Per, unsigned short Tam ){
	int Cont=0;
	char Letra = 0;

	while (Cont < Tam){
		Per[Cont].NomPersona = ArchivoATADNombre(Archivo, Ruta, Separador);
		Per[Cont].DNI = ArchivoATADNIF(Archivo, Ruta, Separador);
		Per[Cont].Edad = ArchivoAEdad(Archivo, Ruta, Separador);
		Per[Cont].EsTrabDir = ArchivoAOcup(Archivo, Ruta, Separador);
		if (Per[Cont].EsTrabDir == 1){
			Per[Cont].DatosOcup.EsTra = ArchivoATADTrabaj(Archivo, Ruta, Separador);
		}else{
			Per[Cont].DatosOcup.EsDirec = ArchivoATADDirec(Archivo, Ruta, Separador);
		}
		Per[Cont].Direccion = ArchivoATADDirecc(Archivo, Ruta, Separador);
		if ((Letra = getc(Archivo)) == 10){
			Cont++;
		}
	}
}

void VectorPersonaAArchivo ( FILE *ArchivoDestino, char Ruta[], char Separador, Persona *Vector, unsigned short Tam ){
	int Pos = 0;
	char Inter[10];

	strcpy(Inter, "0");

	while ( Pos < Tam ){
		fputs(Vector[Pos].NomPersona.NomPr, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].NomPersona.PriApe, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].NomPersona.SegApe, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].DNI.NumNIF, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputc(Vector[Pos].DNI.LetraNIF, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		itoa(Vector[Pos].Edad, Inter, 10); 
		fputs(Inter, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		itoa(Vector[Pos].EsTrabDir, Inter, 10);
		fputs(Inter, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		if (Vector[Pos].EsTrabDir == 1){
			fputs(Vector[Pos].DatosOcup.EsTra.CC, ArchivoDestino);
			fputc(Separador, ArchivoDestino);
			sprintf(Inter, "%1d", Vector[Pos].DatosOcup.EsTra.N_Hijos);
			fputs(Inter, ArchivoDestino);
			fputc(Separador, ArchivoDestino);
			sprintf(Inter, "%4.2f", Vector[Pos].DatosOcup.EsTra.S_Bruto);
			fputs(Inter, ArchivoDestino);
			fputc(Separador, ArchivoDestino);
		}else{
			fputs(Vector[Pos].DatosOcup.EsDirec.Cargo, ArchivoDestino);
			fputc(Separador, ArchivoDestino);
			sprintf(Inter, "%4.2f", Vector[Pos].DatosOcup.EsDirec.Compl);
			fputs(Inter, ArchivoDestino);
			fputc(Separador, ArchivoDestino);
			sprintf(Inter, "%4.2f", Vector[Pos].DatosOcup.EsDirec.S_Bruto);
			fputs(Inter, ArchivoDestino);
			fputc(Separador, ArchivoDestino);
		}
		fputs(Vector[Pos].Direccion.Dir.Carrer, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].Direccion.Dir.Portal, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].Direccion.Dir.Piso, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].Direccion.Dir.Puerta, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].Direccion.Ciutat, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputs(Vector[Pos].Direccion.CPostal, ArchivoDestino);
		fputc(Separador, ArchivoDestino);
		fputc(10, ArchivoDestino);
		Pos++;
	}
}